package three;


import javax.swing.text.StringContent;

/**         引用型数组和普通数组
 * 区别1：给引用类型数组的元素赋值时，需要new个对象
 * 区别2：访问引用类型数组的元素的属性/行为时，需要打点访问
 */

abstract class An {
    String name;
    int age;
    String color;
    An(String name,int age,String color){
        this.name = name;
        this.age = age;
        this.color = color;
    }
    abstract void eat();
}

interface run{
    void run();
}

class dog extends An implements run {

    dog(String name, int age, String color) {
        super(name, age, color);
    }

    @Override
    public void run() {
        System.out.println(color + "色的" + age + "岁的狗狗" + name + "正在奔跑...");
    }

    void eat() {
        System.out.println(color + "色的" + age + "岁的狗狗" + name + "正在吃肯头...");

    }
}

public class referentialArray {
    public static void main(String[] args) {

        dog cute = new dog("小黑",2,"黑");
        System.out.println(cute.age);
//        cute = null; //表示空，没有指向任何对象
//        System.out.println(cute.name);              //会空指针报错，需要rebuild项目


        dog[] dogs = new dog[3];
        dogs[0] = new dog("小黑",2,"黑");
        dogs[1] = new dog("小白",1,"白");
        dogs[2] = new dog("小灰",3,"灰");
        System.out.println(dogs[0].name); //输出第1只狗狗的名字
        dogs[2].eat();
        dogs[1].eat();
        dogs[0].eat();
        dogs[1].run();

        System.out.println("----------------------------");

        An[] an = new An[1];                                     //引用型数组需要先new一个对象。为什么要使用引用型数组，
                                                                // 是因为 Animal o = new Animal()，抽象类不能被实例化，要使用Anmial类定义时就需要new一个引用型数组
        an[0] = new dog("欢欢",10,"绿");
        an[0].eat();
    }


}
